#ifndef _dbhelper_h_
#define _dbhelper_h_

#include <sqlite3.h>
#include <iostream>
#include <vector>

// 一个数据库刀层负责：打开关闭读取写入一个数据中所有表单的所有操作


class dbHelper{
private:
	sqlite3* db;
	sqlite3_stmt* stmt;
public:
	dbHelper(const std::string& dbname = "");
	~dbHelper();

	// dbHelper 操作的数据库中所有能够操作的表单的函数
	bool regist(const std::string& name,const std::string& pswd);
	bool login(const std::string& name,const std::string& pswd);

	// 写针对别的表单的操作函数
	// 如果说要上设计模式，什么开闭原则之类的，也在这里派生就行了
	// 总而言之，数据库刀层目的很简单：将针对数据库的所有操作，集中在一起，方便查询修改
 /**
     * @brief 保存日程到数据库
     * @param username 用户名
     * @param date 日期
     * @param event 日程内容
     * @return 是否成功
     */
    bool saveSchedule(const std::string& username, const std::string& date, const std::string& event);
    
    /**
     * @brief 更新日程
     * @param username 用户名
     * @param oldDate 原日期
     * @param newDate 新日期
     * @param newEvent 新日程内容
     * @return 是否成功
     */
    bool updateSchedule(const std::string& username, const std::string& oldDate, 
                       const std::string& newDate, const std::string& newEvent);
    
    /**
     * @brief 删除日程
     * @param username 用户名
     * @param date 日期
     * @return 是否成功
     */
    bool deleteSchedule(const std::string& username, const std::string& date);
    
    /**
     * @brief 查询日程
     * @param username 用户名
     * @param date 日期(空字符串表示查询所有)
     * @return 日程列表(日期,内容)的vector
     */
    std::vector<std::pair<std::string, std::string>> 
        querySchedules(const std::string& username, const std::string& date = "");
};

#endif